
package com.iocup.keybastion.authorize.element;

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * @Description: 根据url或者方法上的注解进行解析认证元素
 * @Author: xyjxust
 * @Date: 2021/11/26 14:08
 */
@Getter
@Setter
@EqualsAndHashCode(of = {"code","type"})
public class AuthElement implements Serializable {
    /**
     * 权限判断key：可能是url，可能是方法全路径
     */
    private String code;

    /**
     * 权限类型：通过类型会找到对应的处理器
     */
    private String type;

    /**
     * 该类型的权限类型的参数信息：每个注解或者配置提供的认证元素可能不通的参数
     */
    private Map<String, Object> params = new HashMap<>();


    public static AuthElement build() {
        return new AuthElement();
    }

    public AuthElement code(String code) {
        this.code = code;
        return this;
    }

    public AuthElement type(String type) {
        this.type = type;
        return this;
    }

    public AuthElement putParam(String key, Object value) {
        this.params.put(key, value);
        return this;
    }

    public <T> T getParam(String key) {
        return params.containsKey(key) ? (T) params.get(key) : null;
    }
}
